package org.dromara.common.mail.config;

import org.dromara.common.mail.config.properties.MailProperties;
import org.dromara.common.mail.utils.MailAccount;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：JavaMail 配置
 */
@AutoConfiguration
@EnableConfigurationProperties(MailProperties.class)
public class MailConfig {

    /**
     * 配置MailAccount Bean
     * 该方法会在邮件功能被启用时（即配置属性mail.enabled为true），根据邮件配置属性创建并返回一个MailAccount对象
     *
     * @param mailProperties 邮件配置属性对象，包含邮件服务器的配置信息
     * @return 配置好的MailAccount对象，用于邮件发送
     */
    @Bean
    @ConditionalOnProperty(value = "mail.enabled", havingValue = "true")
    public MailAccount mailAccount(MailProperties mailProperties) {
        MailAccount account = new MailAccount();
        // 设置SMTP服务器域名
        account.setHost(mailProperties.getHost());
        // 设置SMTP服务端口
        account.setPort(mailProperties.getPort());
        // 设置是否需要用户名密码验证
        account.setAuth(mailProperties.getAuth());
        // 设置发送方
        account.setFrom(mailProperties.getFrom());
        // 设置用户名
        account.setUser(mailProperties.getUser());
        // 设置密码
        account.setPass(mailProperties.getPass());
        // 设置指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口
        account.setSocketFactoryPort(mailProperties.getPort());
        // 设置是否使用STARTTLS安全连接，STARTTLS是对纯文本通信协议的扩展。它将纯文本连接升级为加密连接（TLS或SSL）， 而不是使用一个单独的加密通信端口。
        account.setStarttlsEnable(mailProperties.getStarttlsEnable());
        // 设置是否使用SSL安全连接
        account.setSslEnable(mailProperties.getSslEnable());
        // 设置SMTP超时时长，单位毫秒，缺省值不超时
        account.setTimeout(mailProperties.getTimeout());
        // 设置Socket连接超时值，单位毫秒，缺省值不超时
        account.setConnectionTimeout(mailProperties.getConnectionTimeout());
        return account;
    }

}
